#include "glsl_types.h"
#include "vtn_private.h"
-#include "nir/nir_vla.h"
#include "nir/nir_control_flow.h"
#include "nir/nir_constant_expressions.h"
#include "nir/nir_deref.h"
#include "util/u_string.h"
#include "util/u_debug.h"
#include "util/mesa-blake3.h"
+#include "util/stack_array.h"
#include <stdio.h>
case vtn_base_type_struct: {
bool need_new_struct = false;
const uint32_t num_fields = type->length;
- NIR_VLA(struct glsl_struct_field, fields, num_fields);
+ STACK_ARRAY(struct glsl_struct_field, fields, num_fields);
for (unsigned i = 0; i < num_fields; i++) {
fields[i] = *glsl_get_struct_field_data(type->type, i);
const struct glsl_type *field_nir_type =
need_new_struct = true;
}
}
+
+ const struct glsl_type *result;
if (need_new_struct) {
if (glsl_type_is_interface(type->type)) {
- return glsl_interface_type(fields, num_fields,
- /* packing */ 0, false,
- glsl_get_type_name(type->type));
+ result = glsl_interface_type(fields, num_fields,
+ /* packing */ 0, false,
+ glsl_get_type_name(type->type));
} else {
- return glsl_struct_type(fields, num_fields,
- glsl_get_type_name(type->type),
- glsl_struct_type_is_packed(type->type));
+ result = glsl_struct_type(fields, num_fields,
+ glsl_get_type_name(type->type),
+ glsl_struct_type_is_packed(type->type));
}
} else {
/* No changes, just pass it on */
- return type->type;
+ result = type->type;
}
+
+ STACK_ARRAY_FINISH(fields);
+ return result;
}
case vtn_base_type_image:
val->type->offsets = vtn_alloc_array(b, unsigned, num_fields);
val->type->packed = false;
- NIR_VLA(struct glsl_struct_field, fields, count);
+ STACK_ARRAY(struct glsl_struct_field, fields, count);
for (unsigned i = 0; i < num_fields; i++) {
val->type->members[i] = vtn_get_type(b, w[i + 2]);
const char *name = NULL;
name ? name : "struct",
val->type->packed);
}
+
+ STACK_ARRAY_FINISH(fields);
break;
}